package com.teamin.mapper;

import com.teamin.entity.MessageEntity;
import com.teamin.entity.NotifiEntity;
import com.teamin.entity.TaskMessageEntity;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 消息的Dao
 */
public interface MessageMapper {

    /** 添加任务消息
     * @param entity
     *
     * eventId 任务消息的事件类型, (必) 1 表示任务执行者更改,2表示任 taskId; //任务ID,event (必)务状态更改
     * value ; //任务的操作值 (必)
     * @return 0成功1失败
     */
    int addMessageAboutTask(TaskMessageEntity entity) ;

    /**
     * 关系消息到用户
     * @param userId 消息接收的用户
     * @param messageType 消息类型 1表示任务消息
     * @param messageReId 消息引用ID 如是任务则为 addMessageAbout 接口中返回的id
     * @return
     */
    int relationMessageToUser(MessageEntity messageEntity);

    /**
     * 设置消息为已读状态
     * @param userId 消息ID
     * @param messageIds 消息的id 字符串
     * @return 0表示失败,其他为成功
     */
    int setMessageReaded(@Param("userId")Long userId,@Param("messageIds")String messageIds);

    /**
     * 获取用户圈子下的消息
     * @param userId 用户ID
     * @return
     */
    List<MessageEntity> getMessageByUserAndCircle(@Param("userId")Long userId,@Param("circleId")Long circleId);

    /**
     * 获取用户的消息
     * @param userId 用户ID
     * @return
     */
    List<MessageEntity> getMessageByUser(@Param("userId")Long userId,@Param("readState")Integer readState);

    
    int insertSelective(MessageEntity record);
    /**
     * 查询一条消息
     * @param messageId
     * @return
     */
    MessageEntity selectByPrimaryKey(@Param("messageId") Long messageId);

    int updateByPrimaryKeySelective(MessageEntity record);

    int updateByPrimaryKey(MessageEntity record);

    /**
     * 获取任务发送通知的成员任务的关注者,执行者,创建者
     * @param taskId 任务ID
     * @return
     */
    List<NotifiEntity> getTaskNotifiUser(@Param("taskId") Long taskId);

    /**
     * 获取用户公众号ID,并且判断在用户在指定的圈子
     * @param userId 用户ID
     * @return
     */
    public NotifiEntity getMPOpenId(@Param("userId") Long userId,@Param("circleId") Long circleId) ;

    /**
     * 获取用户公众号ID,并
     * @param userId 用户ID
     * @return
     */
    public NotifiEntity getMPOpenIdByUser(@Param("userId") Long userId) ;

    /**
     * 获取任务发送通知的成员任务的关注者,执行者
     * @param taskId 任务ID
     * @return
     */
    List<NotifiEntity> getTaskNotifiAttentionAndAssigner(@Param("taskId") Long taskId,@Param("exUser")List<Long> exUser) ;

    /**
     * 获取任务发送通知的成员任务的关注者
     * @param taskId 任务ID
     * @return
     */
    List<NotifiEntity> getTaskNotifiAttention(@Param("taskId") Long taskId,@Param("exUser")List<Long> exUser) ;


}